package com.atde._05_behavioral_design_patterns.iterator;


import java.util.Iterator;
import java.util.List;

/**
 * @BelongsProject: hsp_java_design_mode
 * @BelongsPackage: com.atde._05_behavioral_design_patterns.iterator
 * @Author: Del
 * @CreateTime: 2025-06-27  15:30
 * @Description: 迭代器模式中的客户端组件，用于统一输出多个学院及其下属部门信息。
 *                通过迭代器接口遍历不同实现的学院集合（如 [InfoCollege](file://D:\study_data\学习资料\后端\韩顺平\hsp_java_design_mode\DesignPattern\src\com\atde\_05_behavioral_design_patterns\iterator\InfoCollege.java#L1-L43) 和 [ComputerCollege](file://D:\study_data\学习资料\后端\韩顺平\hsp_java_design_mode\DesignPattern\src\com\atde\_05_behavioral_design_patterns\iterator\ComputerCollege.java#L1-L39)），
 *                实现对聚合对象的统一访问与展示。
 * @Version: 1.0
 */
public class OutPutImpl {

    // 定义了一个学院列表，用于存储多个学院的信息
    List<Colleage> collegeList;

    /**
     * 构造函数，初始化学院列表
     * @param collegeList 一个包含多个学院的列表
     */
    public OutPutImpl(List<Colleage> collegeList) {
        this.collegeList = collegeList;
    }


    /***
     * @author: Del
     * @date: 2025/6/27 15:37
     * @description: 遍历学院列表，并打印每个学院及其系
     */
    public void printColleage() {
        for (Colleage college : collegeList) {
            // 打印学院名称分隔符
            System.out.println("===========" + college.getName() + "===========");
            // 使用学院创建迭代器，打印专业系别信息
            priintDepartment(college.createIterator());
        }
    }

    /**
     * @author: Del
     * @date: 2025/6/27 15:38
     * @param iterator 专业协变
     * @description:
     */
    public void priintDepartment(Iterator iterator) {
        while (iterator.hasNext()) {
            Department department = (Department) iterator.next();
            System.out.println(department.getName());
        }
    }
}
